//The MIT License (MIT)
//
//Copyright (c) 2018 dote
//
//Permission is hereby granted, free of charge, to any person obtaining a copy of
//this software and associated documentation files (the "Software"), to deal in
//the Software without restriction, including without limitation the rights to
//use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
//the Software, and to permit persons to whom the Software is furnished to do so,
//subject to the following conditions:
//
//The above copyright notice and this permission notice shall be included in all
//copies or substantial portions of the Software.
//
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
//FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
//IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
//CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

package com.github.dote.mio.filter;

import com.github.dote.mio.client.IOClient;
import com.github.dote.mio.filter.ext.Page;
import com.github.dote.mio.filter.ext.PageRequest;
import com.github.dote.mio.filter.ext.Pageable;
import com.github.dote.mio.filter.ext.Sort;
import com.github.dote.mio.filter.filter.SearchFilter;
import com.github.dote.mio.filter.filter.SearchFilterHelper;

import java.util.Collection;
import java.util.List;

/**
 * 查询帮助类
 */
public final class QueryHelper {


    public static Page<IOClient> queryClientPage(Collection<IOClient> clientList, Searchable searchable, Pageable pageable, Sort sort) {
        IQuery query = new QueryImpl(clientList);
        return query.findAll(searchable.setPage(pageable).addSort(sort));
    }

    public static List<IOClient> queryClientList(Collection<IOClient> clientList, Searchable searchable, Pageable pageable, Sort sort) {
        IQuery query = new QueryImpl(clientList);
        return query.findAll(searchable.setPage(pageable).addSort(sort)).getContent();
    }

    public static Page<IOClient> queryClientPage(Collection<IOClient> clientList, Searchable searchable, Pageable pageable) {
        IQuery query = new QueryImpl(clientList);
        return query.findAll(searchable.setPage(pageable));
    }

    public static List<IOClient> queryClientList(Collection<IOClient> clientList, Searchable searchable, Pageable pageable) {
        IQuery query = new QueryImpl(clientList);
        return query.findAll(searchable.setPage(pageable)).getContent();
    }

    public static Page<IOClient> queryClientPage(Collection<IOClient> clientList, Searchable searchable) {
        IQuery query = new QueryImpl(clientList);
        return query.findAll(searchable);
    }

    public static List<IOClient> queryClientList(Collection<IOClient> clientList, Searchable searchable) {
        IQuery query = new QueryImpl(clientList);
        return query.findAll(searchable).getContent();
    }

}
